package pub.wkq.api.controller.intercept;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.servlet.HandlerInterceptor;
import pub.wkq.common.base.BaseInfoProperties;
import pub.wkq.common.exception.CustomException;
import pub.wkq.common.result.ResponseStatusEnum;
import pub.wkq.common.utils.IPUtil;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 短信拦截器
 *
 * @Author: 王开琦
 * @Date: 2023/6/5 21:01
 */
@Slf4j
public class SMSIntercept extends BaseInfoProperties implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //获得用户Ip
        String userIp = IPUtil.getRequestIp(request);
        //获得用于判断的 boolean
        boolean ipIsExist = redis.keyIsExist(MOBILE_SMSCODE + ":" + userIp);
        //如果存在，说明用户在 60 秒内发送过短信，
        if (ipIsExist) {
            log.error("用户 {} 在 60 秒内发送过短信", userIp);
            //返回指定的错误信息
            CustomException.thr(ResponseStatusEnum.SMS_NEED_WAIT_ERROR);
            //请求被拦截
            return false;
        } else {
            //如果不存在，说明用户在 60 秒内没有发送过短信，可以发送短信
            //设置 60 秒过期时间
            redis.setnx60s(MOBILE_SMSCODE + ":" + userIp, "1");
            return true;
        }
    }
}
